﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TOAcademias;
using System.Data.Linq.SqlClient;

namespace DAOAcademias
{

    /*************************************
    Autor: Carlos Sánchez
    Fecha de Creación: 06/02/2011
    Descripción de la Funcionalidad: Clase que contiene metodos que serviran para dar
    soporte a los registros de la entidad Calificacion.
    **************************************/    
    
    public class DOCalificacion
    {

        DBModuloAcademiasDataContext dbml;

          public DOCalificacion()
        {
            dbml = new DBModuloAcademiasDataContext();
        }

        public List<TOCalificacion> obtenerCalificacion()
        {

            List<TOCalificacion> listaCalificacion = new List<TOCalificacion>();

            var calificaciones = (from cal in dbml.CALIFICACIONs
                                  join soc in dbml.SOCIOs
                                  on cal.COD_SOCIO equals soc.COD_SOCIO
                                  select new { cal.COD_CALIFICACION, cal.COD_SECCION, cal.COD_SOCIO, soc.NOM_SOCIO, cal.NOT_CALIFICACION, cal.COMENTARIO}
                             );

            foreach (var calificacion in calificaciones) {

                TOCalificacion toCalificacion = new TOCalificacion();
                toCalificacion.Codigo = calificacion.COD_CALIFICACION;
                toCalificacion.Seccion = calificacion.COD_SECCION;
                toCalificacion.Socio = calificacion.COD_SOCIO;
                toCalificacion.NombreSocio = calificacion.COD_SOCIO;
                toCalificacion.Nota = calificacion.NOT_CALIFICACION;
                toCalificacion.Comentario = calificacion.COMENTARIO;

                listaCalificacion.Add(toCalificacion);
            
            }

            return listaCalificacion;
        }

        public List<TOCalificacion> obtenerCalificacionxSeccion(String CodigoSeccion)
        {
            List<TOCalificacion> listaCalificacion = new List<TOCalificacion>();

            var calificaciones = (from cal in dbml.CALIFICACIONs
                                  join soc in dbml.SOCIOs
                                  on cal.COD_SOCIO equals soc.COD_SOCIO
                                  where cal.COD_SECCION == CodigoSeccion
                                  select new { cal.COD_CALIFICACION, cal.COD_SECCION, cal.COD_SOCIO, soc.NOM_SOCIO, cal.NOT_CALIFICACION, cal.COMENTARIO }
                             );

            foreach (var calificacion in calificaciones)
            {

                TOCalificacion toCalificacion = new TOCalificacion();
                toCalificacion.Codigo = calificacion.COD_CALIFICACION;
                toCalificacion.Seccion = calificacion.COD_SECCION;
                toCalificacion.Socio = calificacion.COD_SOCIO;
                toCalificacion.NombreSocio = calificacion.NOM_SOCIO;
                toCalificacion.Nota = calificacion.NOT_CALIFICACION;
                toCalificacion.Comentario = calificacion.COMENTARIO;

                listaCalificacion.Add(toCalificacion);

            }

            return listaCalificacion;
        }

        public void generarCalificacionxSeccion(String CodigoSeccion)
        {

            List<TOCalificacion> listaCalificacion = new List<TOCalificacion>();

            var calificaciones = (from soc in dbml.SOCIOs
                               join mat in dbml.MATRICULAs
                               on soc.COD_SOCIO equals mat.COD_SOCIO
                               join matsec in dbml.MATRICULA_SECCIONs
                               on mat.COD_MATRICULA equals matsec.COD_MATRICULA
                               join sec in dbml.SECCIONs
                               on matsec.COD_SECCION equals sec.COD_SECCION
                               where matsec.COD_SECCION == CodigoSeccion
                               select new { sec.COD_SECCION, soc.COD_SOCIO, soc.NOM_SOCIO }
                             );

            foreach (var calificacion in calificaciones)
            {
                TOCalificacion toCalificacion = new TOCalificacion();
                //toCalificacion.Codigo = calificacion.COD_CALIFICACION;
                toCalificacion.Seccion = calificacion.COD_SECCION;
                toCalificacion.Socio = calificacion.COD_SOCIO;
                toCalificacion.NombreSocio = calificacion.COD_SOCIO;
                toCalificacion.Nota = "MEDIO";
                toCalificacion.Comentario = String.Empty;
                if (!validarExisteCalificacion(toCalificacion))
                {
                    insertarCalificacion(toCalificacion);
                }
            }

            //return listaAsistencias;
        }


        public Boolean validarExisteCalificacion(TOCalificacion toCalificacion)
        {

            var calificaciones = (from cal in dbml.CALIFICACIONs
                               where cal.COD_SECCION == toCalificacion.Seccion && cal.COD_SOCIO == toCalificacion.Socio
                               select cal
                             );

            if (calificaciones.Count() > 0)
                return true;
            else
                return false;

        }

        public void grabarCalificacion(TOCalificacion toCalificacion)
        {
            if (!validarExisteCalificacion(toCalificacion))
            {
                insertarCalificacion(toCalificacion);
            }
            else
            {
                modificarCalificacion(toCalificacion);
            }

        }

        public String generarCodigoCalificacion()
        {
            List<TOCalificacion> listaCalificacion = obtenerCalificacion();

            int intAux = 0;
            int intTemp = 0;
            foreach (TOCalificacion calificacion in listaCalificacion)
            {
                intTemp = Convert.ToInt32(calificacion.Codigo.Substring(2));
                if (intTemp > intAux)
                {
                    intAux = intTemp;
                }
            }
            intAux = intAux + 1;

            string strCodigo = "" + intAux;

            strCodigo = "CA000".Substring(0, 5 - strCodigo.Length) + intAux;

            return strCodigo;
        }

        public void insertarCalificacion(TOCalificacion toCalificacion)
        {

            CALIFICACION cal = new CALIFICACION();
            cal.COD_CALIFICACION = generarCodigoCalificacion();
            cal.COD_SECCION = toCalificacion.Seccion;
            cal.COD_SOCIO = toCalificacion.Socio;
            cal.NOT_CALIFICACION = toCalificacion.Nota;
            cal.COMENTARIO = toCalificacion.Comentario;

            dbml.CALIFICACIONs.InsertOnSubmit(cal);
            dbml.SubmitChanges();


        }

        public void modificarCalificacion(TOCalificacion toCalificacion)
        {
            var calificacion = (from cal in dbml.CALIFICACIONs
                            where cal.COD_CALIFICACION == toCalificacion.Codigo
                            select cal).Single();

            calificacion.COD_CALIFICACION = toCalificacion.Codigo;
            //calificacion.COD_SECCION = toCalificacion.Seccion;
            //calificacion.COD_SOCIO = toCalificacion.Socio;
            calificacion.NOT_CALIFICACION = toCalificacion.Nota;
            calificacion.COMENTARIO = toCalificacion.Comentario;

            dbml.SubmitChanges();

        }


    }
}
